import 'package:bluetooth_protocols_plugin/src/tools/extension_enum.dart';

/*
  0 操作成功
  1 文件不存在 只在以只读，或读写（打开已存在文件）方式打开文件时存在
  2 不支持的操作 文件不允许相应的打开方式或不允许删除/重命名
  3 操作冲突 文件重复打开，或者对已经打开的文件进行删除重命名
  4 同时打开的文件数量已达上限
  5 非法句柄 句柄所对应的文件未打开
  6 文件系统错误
  7 文件底层 IO 错误 驱动问题或物理介质问题
  8 输入参数错误 读写文件时读写指针超过当前文件大小，或者获取文件列表时请求
  序号不连续，或者输入的文件遍历控制字符串不合语法规则
  9 系统内部程序错误 应用层软件错误，如分配的缓冲区不足（常见的有应答参数缓存不
  足，输入的文件名过长等）
  10 当前状态不允许相应操作 如骑行状态下不允许进行固件文件下载
  11 无操作权限
  12 其他错误
*/

// 文件操作错误类型
enum FileHandleErrorType {
  success(0),
  fileNotExist(1),
  unsupportedOperation(2),
  operationConflict(3),
  maxOpenFilesReached(4),
  illegalHandle(5),
  fileSystemError(6),
  fileIOError(7),
  invalidInputParameter(8),
  internalProgramError(9),
  invalidStateOperation(10),
  noPermission(11),
  otherError(12);

  String get name {
    switch (this) {
      case FileHandleErrorType.success:
        return "操作成功";
      case FileHandleErrorType.fileNotExist:
        return "文件不存在";
      case FileHandleErrorType.unsupportedOperation:
        return "不支持的操作";
      case FileHandleErrorType.operationConflict:
        return "操作冲突";
      case FileHandleErrorType.maxOpenFilesReached:
        return "同时打开的文件数量已达上限";
      case FileHandleErrorType.illegalHandle:
        return "非法句柄";
      case FileHandleErrorType.fileSystemError:
        return "文件系统错误";
      case FileHandleErrorType.fileIOError:
        return "文件底层 IO 错误";
      case FileHandleErrorType.invalidInputParameter:
        return "输入参数错误";
      case FileHandleErrorType.internalProgramError:
        return "系统内部程序错误";
      case FileHandleErrorType.invalidStateOperation:
        return "当前状态不允许相应操作";
      case FileHandleErrorType.noPermission:
        return "无操作权限";
      case FileHandleErrorType.otherError:
        return "其他错误";
    }
  }

  final int rawValue;
  const FileHandleErrorType(this.rawValue);

  // 通过 rawValue 获取枚举类型
  static FileHandleErrorType? getTypeByNum(int rawValue) =>
      FileHandleErrorType.values
          .firstWhereOrNull((activity) => activity.rawValue == rawValue);
}
